package db

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"time"
)


type MysqlStruct struct {
	User, Passwd, Host string
	Port               int
	DbName             string
	//DbConnPool         int
	Db                 *gorm.DB
}

func NewMysqlStruct(user,passwd,host,dbname string ,port int)MysqlStruct{
	return MysqlStruct{User: user,Passwd: passwd,Host:host,DbName: dbname,Port: port}
}

// Setup 初始化连接
func (m *MysqlStruct) GetDB() error {

	dbURI := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&&parseTime=true&parseTime=True&loc=Local",
		m.User, m.Passwd, m.Host, m.Port, m.DbName)
	db, err := gorm.Open(mysql.Open(dbURI))
	if err != nil {
		return err
	}
	sqlDB, err :=db.DB()
	sqlDB.SetMaxIdleConns(10)
	sqlDB.SetMaxOpenConns(100)
	sqlDB.SetConnMaxLifetime(time.Hour)
	m.Db=db
	//m.Db = db//.Session(&gorm.Session{})
	return nil

}
//func (m *MysqlStruct) GetDB2() error {
//
//	dbURI := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&&parseTime=true&parseTime=True&loc=Local",
//		m.User, m.Passwd, m.Host, m.Port, m.DbName)
//	sqlDB, err := sql.Open("mysql", dbURI)
//	if err != nil {
//		return err
//	}
//	sqlDB.SetMaxIdleConns(200) //设置最大连接数
//	sqlDB.SetMaxOpenConns(20)           //设置最大的空闲连接数
//	sqlDB.SetConnMaxLifetime(3600)
//	db, err := gorm.Open(
//		mysql.New(
//			mysql.Config{Conn: sqlDB}),
//	)
//	m.Db = db//.Session(&gorm.Session{})
//	return nil
//}
//type Users struct {
//	Id               int
//	Uname            string    `gorm:"column:uname"`
//	Umail            string    `gorm:"column:umail"`
//	Gitlabid         int       `gorm:"column:gitlabid"`
//	Block            string    `gorm:"column:block"`
//	TimeGitlabcreate string    `gorm:"column:time_gitlabCreate"`
//	Lastlogin        string    `gorm:"column:time_lastlogin"`
//	Lastupdate       time.Time `gorm:"column:lastupdate"`
//	Role             int
//	Workcode         string `gorm:"column:workcode"`
//}
//
//
//
//// 新建记录
//func (m *MysqlStruct) NewUser(u *Users) error {
//	tx := m.Db.Begin()
//	if err := tx.Create(&Users{Uname: u.Uname, Umail: u.Umail, Gitlabid: u.Gitlabid, Role: 9}).Error; err != nil {
//		fmt.Println(err.Error())
//		return err
//	}
//	return nil
//}
//
//// 查询记录,单条件 ，返回结果确实是唯一的
//func (m *MysqlStruct) GetAUserByUid(u *Users) error {
//	var result []Users
//	tx := m.Db.Begin()
//	if err := tx.Where(&Users{Gitlabid: u.Gitlabid}).First(&result).Error; err != nil {
//		return err
//	}
//	switch len(result) {
//	case 1:
//		*u = result[0]
//		return nil
//	case 0:
//		return errors.New("查询结果为空")
//	default:
//		return errors.New("查询结果不对")
//	}
//}
//
//// 查询记录,多条件查一个。
//func (m *MysqlStruct) GetAUserByUidWorkcode(u *Users) error {
//	var result []Users
//	// 第一种方法
//	//tx := m.Tx.Where("gitlabid =? " ,u.Gitlabid).Find(&result)
//	//err := tx.Where("workcode = ?",u.Workcode).Find(&result).Error
//	// 第2种方法 如果条件1不存在 ，u.workcode结果会错
//	//err := m.Tx.Where("workcode = ?",u.Workcode).Where("gitlabid =? " ,u.Gitlabid).Find(&result).Error
//	// 第3种方法 通过结构体方式来
//	tx := m.Db.Begin()
//	err := tx.Find(&result, &Users{Workcode: u.Workcode, Gitlabid: u.Gitlabid}).Error
//	if err != nil {
//		fmt.Println(err.Error())
//	}
//	//
//	switch len(result) {
//	case 1:
//		*u = result[0]
//		return nil
//	case 0:
//		return errors.New("查询结果为空")
//	default:
//		return errors.New("查询结果不对")
//	}
//}
//
//// 新增记录,不成功则返回err
//func (m *MysqlStruct) AddUser(u *Users) error {
//	tx := m.Db.Begin()
//	defer func() {
//		if r := recover(); r != nil {
//			tx.Rollback()
//		}
//	}()
//	if err := tx.Create(u).Error; err != nil {
//		tx.Rollback()
//		return err
//	}
//	return tx.Commit().Error
//}
//
//// 警告： 当使用结构体更新的时候, GORM 只会更新那些非空的字段
//func (m *MysqlStruct) UpdateUserById(id int, u *Users) error {
//	//m.Tx.Find
//	return nil
//}

// 修改记录

// 删除记录
